package com.neighbor.neighborhoodadmin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.neighbor.neighborhoodadmin.pojo.Posts;
import com.neighbor.neighborhoodadmin.dao.IPostsDao;
import com.neighbor.neighborhoodadmin.service.IPostsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.neighbor.neighborhoodadmin.utils.ResponseMsg;
import org.apache.ibatis.type.Alias;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 用户帖子表 服务实现类
 * </p>
 *
 * @author song
 * @since 2025-09-22 09:11:23
 */
@Service
public class PostsServiceImpl extends ServiceImpl<IPostsDao, Posts> implements IPostsService {

    @Autowired
    private IPostsDao postsDao;

    @Override
    public List<Posts> getHots() { //获取热门帖子
        return postsDao.getHots();
    }

    @Override
    public IPage<Posts> getPosts(Integer page, Integer pageSize, Integer type, Integer status, Integer postId, String nickname) {
        Page<Posts> pageQuery = new Page<>(page, pageSize);
        // 调用自定义mapper方法执行连表查询
        return postsDao.getPostsWithUser(pageQuery, type, status, postId, nickname);
    }

    /**
     * 根据ID获取帖子详情。
     * @param postId 帖子ID
     * @return ResponseMsg 包含帖子详情的响应。
     */
    @Override
    public ResponseMsg getPostById(Integer postId) {
        // 调用自定义mapper方法执行连表查询，获取带用户信息的帖子
        Posts post = postsDao.getPostWithUserById(postId);
        if (post == null) {
            return ResponseMsg.getInstance(ResponseMsg.PARAMETER_ERROR, "未找到该帖子");
        }
        return ResponseMsg.getInstance(ResponseMsg.SUCCESS, "成功获取帖子详情", post);
    }

    /**
     * 更新帖子的状态。
     * @param postId 帖子ID
     * @param status 新状态
     * @return ResponseMsg 包含操作结果的响应。
     */
    @Override
    public ResponseMsg updatePostStatus(Integer postId, Integer status) {
        // 创建一个 UpdateWrapper 来构建更新条件
        UpdateWrapper<Posts> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("post_id", postId);

        Posts post = new Posts();
        post.setStatus(Byte.parseByte(String.valueOf(status))); // 假设 Post 实体中有一个 status 字段

        boolean updated = this.update(post, updateWrapper); // MP 提供的更新方法

        if (updated) {
            return ResponseMsg.success("帖子状态更新成功");
        }
        return ResponseMsg.getInstance(ResponseMsg.PARAMETER_ERROR,"帖子状态更新失败，可能是帖子ID不存在");
    }

    /**
     * 根据ID删除帖子。
     * @param postId 帖子ID
     * @return ResponseMsg 包含操作结果的响应。
     */
    @Override
    public ResponseMsg deletePost(Integer postId) {
        // 使用 removeById 方法删除记录，如果不存在则返回false
        boolean removed = this.removeById(postId);

        if (removed) {
            return ResponseMsg.success("帖子删除成功");
        }
        return ResponseMsg.getInstance(ResponseMsg.PARAMETER_ERROR,"帖子删除失败，可能是帖子ID不存在");
    }
}
